{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5d904dee",
   "metadata": {},
   "source": [
    "# Example 1: Function Fitting\n",
    "\n",
    "In this example, we will cover how to leverage grid refinement to maximimze KANs' ability to fit functions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94056ef6",
   "metadata": {},
   "source": [
    "intialize model and create dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0a59179d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from kan import *\n",
    "\n",
    "# initialize KAN with G=3\n",
    "model = KAN(width=[2,1,1], grid=3, k=3)\n",
    "\n",
    "# create dataset\n",
    "f = lambda x: torch.exp(torch.sin(torch.pi*x[:,[0]]) + x[:,[1]]**2)\n",
    "dataset = create_dataset(f, n_var=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb1f817e",
   "metadata": {},
   "source": [
    "Train KAN (grid=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a87b97b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 1.54e-02 | test loss: 1.49e-02 | reg: 3.01e+00 : 100%|██| 20/20 [00:03<00:00,  5.80it/s]\n"
     ]
    }
   ],
   "source": [
    "model.train(dataset, opt=\"LBFGS\", steps=20);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52294efd",
   "metadata": {},
   "source": [
    "The loss plateaus. we want a more fine-grained KAN!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3f1cfc9d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# initialize a more fine-grained KAN with G=10\n",
    "model2 = KAN(width=[2,1,1], grid=10, k=3)\n",
    "# initialize model2 from model\n",
    "model2.initialize_from_another_model(model, dataset['train_input']);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3cc5079",
   "metadata": {},
   "source": [
    "Train KAN (grid=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "898b1794",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 3.10e-04 | test loss: 3.21e-04 | reg: 3.00e+00 : 100%|██| 20/20 [00:03<00:00,  6.45it/s]\n"
     ]
    }
   ],
   "source": [
    "model2.train(dataset, opt=\"LBFGS\", steps=20);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcdc0d3d",
   "metadata": {},
   "source": [
    "The loss becomes lower. This is good! Now we can even iteratively making grids finer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a1c25e8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 6.94e-03 | test loss: 6.84e-03 | reg: 2.85e+00 : 100%|██| 50/50 [00:07<00:00,  6.75it/s]\n",
      "train loss: 3.93e-04 | test loss: 3.60e-04 | reg: 2.88e+00 : 100%|██| 50/50 [00:08<00:00,  5.79it/s]\n",
      "train loss: 4.01e-05 | test loss: 4.03e-05 | reg: 2.88e+00 : 100%|██| 50/50 [00:13<00:00,  3.72it/s]\n",
      "train loss: 3.15e-06 | test loss: 8.24e-06 | reg: 2.88e+00 : 100%|██| 50/50 [00:28<00:00,  1.73it/s]\n",
      "train loss: 1.33e-06 | test loss: 6.47e-06 | reg: 2.88e+00 : 100%|██| 50/50 [00:29<00:00,  1.70it/s]\n"
     ]
    }
   ],
   "source": [
    "grids = np.array([5,10,20,50,100])\n",
    "\n",
    "train_losses = []\n",
    "test_losses = []\n",
    "steps = 50\n",
    "k = 3\n",
    "\n",
    "for i in range(grids.shape[0]):\n",
    "    if i == 0:\n",
    "        model = KAN(width=[2,1,1], grid=grids[i], k=k)\n",
    "    if i != 0:\n",
    "        model = KAN(width=[2,1,1], grid=grids[i], k=k).initialize_from_another_model(model, dataset['train_input'])\n",
    "    results = model.train(dataset, opt=\"LBFGS\", steps=steps, stop_grid_update_step=30)\n",
    "    train_losses += results['train_loss']\n",
    "    test_losses += results['test_loss']\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6be8ba55",
   "metadata": {},
   "source": [
    "Training dynamics of losses display staircase structures (loss suddenly drops after grid refinement)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "156f68a2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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p+V1TnSdKyoqzNtvv91ctWqVmZ2dbS5dutQcO3as2atXL13ndvrVr35lRkREmMuWLTPz8vKalurq6qZt9Jn2jJNda2/5XCsIWSQzM9NMSUkxHQ6HmZ6e3uxxQmm/q6++2kxISDD9/f3NxMRE8/LLLze3bt3a9LrL5TLvvfdeMz4+3gwICDAnTpxobtmyxcKKu46lS5eaQItl5syZpmm27drW1NSYN998sxkVFWUGBQWZP/rRj8zc3FwLzsZ7neg6V1dXm1OmTDF79uxp+vv7m8nJyebMmTNbXENd55M73jUGzBdffLFpG32mPeNk19pbPtfGsWJFREREuh31ERIREZFuS0FIREREui0FIREREem2FIRERESk21IQEhERkW5LQUhERES6LQUhERER6bYUhERERKTbUhASERGRbktBSER83qxZs5g+fbrVZYiIF1IQEhERkW5LQUhEfMabb77JsGHDCAoKIjo6mvPOO48777yTl156ibfffhvDMDAMg2XLlgFw6NAhrr76anr06EF0dDSXXnopOTk5Tfv7piXpvvvuIzY2lvDwcH75y19SX19vzQmKiMf5WV2AiIgn5OXlce211/LQQw9x2WWXUVFRwcqVK7nhhhvIzc2lvLycF198EYCoqCiqq6uZPHkyEyZMYMWKFfj5+fHnP/+ZCy+8kM2bN+NwOAD49NNPCQwMZOnSpeTk5PDTn/6UmJgYHnjgAStPV0Q8REFIRHxCXl4ejY2NXH755aSkpAAwbNgwAIKCgqirqyM+Pr5p+5dffhmbzcbzzz+PYRgAvPjii0RGRrJs2TKmTJkCgMPh4IUXXiA4OJihQ4dy//33c+edd/KnP/0Jm02N6iJdnf4rFhGfMGLECM4991yGDRvGlVdeyXPPPUdJSUmr22/YsIE9e/YQFhZGaGgooaGhREVFUVtby969e5vtNzg4uOn3sWPHUllZyYEDBzr0fESkc6hFSER8gt1uZ8mSJaxatYqPP/6YJ598krvvvps1a9Ycd3uXy0VGRgb//ve/W7zWs2fPkx7vm1YkEenaFIRExGcYhsH48eMZP34899xzDykpKSxevBiHw4HT6Wy2bXp6Oq+99lpTJ+jWbNq0iZqaGoKCggBYvXo1oaGh9O7du0PPRUQ6h26NiYhPWLNmDQ8++CDr168nNzeXRYsWcfToUYYMGUKfPn3YvHkzO3fupLCwkIaGBq6//npiYmK49NJLWblyJdnZ2Sxfvpxbb72VgwcPNu23vr6en//852zbto0PPviAe++9l5tvvln9g0R8hFqERMQnhIeHs2LFCh5//HHKy8tJSUnhr3/9K1OnTmXUqFEsW7aMUaNGUVlZydKlS5k0aRIrVqzgd7/7HZdffjkVFRX06tWLc889t1kL0bnnnsvAgQOZOHEidXV1XHPNNcybN8+6ExURjzJM0zStLkJExBvNmjWL0tJS3nrrLatLEZEOorZdERER6bYUhERERKTb0q0xERER6bbUIiQiIiLdloKQiIiIdFsKQiIiItJtKQiJiIhIt6UgJCIiIt2WgpCIiIh0WwpCIiIi0m0pCImIiEi39f8BtHZUFFKygrYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(train_losses)\n",
    "plt.plot(test_losses)\n",
    "plt.legend(['train', 'test'])\n",
    "plt.ylabel('RMSE')\n",
    "plt.xlabel('step')\n",
    "plt.yscale('log')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ed8d26b",
   "metadata": {},
   "source": [
    "Neural scaling laws"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8301085c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'RMSE')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_params = 3 * grids\n",
    "train_vs_G = train_losses[(steps-1)::steps]\n",
    "test_vs_G = test_losses[(steps-1)::steps]\n",
    "plt.plot(n_params, train_vs_G, marker=\"o\")\n",
    "plt.plot(n_params, test_vs_G, marker=\"o\")\n",
    "plt.plot(n_params, 100*n_params**(-4.), ls=\"--\", color=\"black\")\n",
    "plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "plt.legend(['train', 'test', r'$N^{-4}$'])\n",
    "plt.xlabel('number of params')\n",
    "plt.ylabel('RMSE')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
